/**
 * 2019-05-13
 * 从 Vue 的出生文件导入 Vue
 */
import Vue from './instance/index'
import {initGlobalAPI} from './global-api/index'
import {isServerRendering} from 'core/util/env'
import {FunctionalRenderContext} from 'core/vdom/create-functional-component'

/**
 * 2019-05-13
 * 将 Vue 构造函数作为参数，传递给 initGlobalAPI 方法，该方法来自 ./global-api/index.js 文件
 */
initGlobalAPI(Vue)

/**
 * 2019-05-13
 * 在 Vue.prototype 上添加 $isServer 属性，该属性代理了来自 core/util/env.js 文件的 isServerRendering 方法
 */
Object.defineProperty(Vue.prototype, '$isServer', {
  get: isServerRendering
})

/**
 * 2019-05-13
 * 在 Vue.prototype 上添加 $ssrContext 属性
 */
Object.defineProperty(Vue.prototype, '$ssrContext', {
  get () {
    /* istanbul ignore next */
    return this.$vnode && this.$vnode.ssrContext
  }
})

// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
  value: FunctionalRenderContext
})

/**
 * 2019-05-13
 * Vue.version 存储了当前 Vue 的版本号
 *    1.在 Vue 构造函数上添加了一个静态属性 version，存储了当前 Vue 的版本值，
 *    2.但是这里的 '__VERSION__' 是什么鬼？
 *    3.打开 scripts/config.js 文件，找到 genConfig 方法，其中有这么一句话：__VERSION__: version。
 *    4.这句话被写在了 rollup 的 replace 插件中，
 *    5.也就是说，__VERSION__ 最终将被 version 的值替换，而 version 的值就是 Vue 的版本号
 */
Vue.version = '__VERSION__'

export default Vue
